home *** CD-ROM | disk | FTP | other *** search
- VERSION 5.00
- Begin VB.Form DDTut1
- Caption = "DirectDraw Tutorial 1"
- ClientHeight = 4485
- ClientLeft = 570
- ClientTop = 690
- ClientWidth = 5670
- Icon = "DDTut1.frx":0000
- LinkTopic = "Form1"
- ScaleHeight = 299
- ScaleMode = 3 'Pixel
- ScaleWidth = 378
- Begin VB.PictureBox Picture1
- ClipControls = 0 'False
- Height = 4452
- Left = 0
- ScaleHeight = 4395
- ScaleWidth = 5595
- TabIndex = 0
- Top = 0
- Width = 5652
- End
- Attribute VB_Name = "DDTut1"
- Attribute VB_GlobalNameSpace = False
- Attribute VB_Creatable = False
- Attribute VB_PredeclaredId = True
- Attribute VB_Exposed = False
- Option Explicit
- Option Compare Text
- 'Module level variables
- Dim objDX As New DirectX7
- Dim objDD As DirectDraw7
- Dim objDDSurf As DirectDrawSurface7
- Dim objDDPrimSurf As DirectDrawSurface7
- Dim ddsd1 As DDSURFACEDESC2
- Dim ddsd2 As DDSURFACEDESC2
- Dim ddClipper As DirectDrawClipper
- Dim bInit As Boolean
- Private Sub Form_Load()
- init
- End Sub
- Sub init()
- Dim sMedia As String
- 'Initialization procedure
-
- 'The empty string parameter means to use the active display driver
- Set objDD = objDX.DirectDrawCreate("")
- 'Notice that the show event calls Form_Resize
-
- 'Indicate this app will be a normal windowed app
- 'with the same display depth as the current display
- Call objDD.SetCooperativeLevel(Me.hWnd, DDSCL_NORMAL)
- 'Indicate that the ddsCaps member is valid in this type
- ddsd1.lFlags = DDSD_CAPS
- 'This surface is the primary surface (what is visible to the user)
- ddsd1.ddsCaps.lCaps = DDSCAPS_PRIMARYSURFACE
- 'Your creating the primary surface now with the surface description you just set
- Set objDDPrimSurf = objDD.CreateSurface(ddsd1)
- 'Call the FindMediaDir procedure
- sMedia = FindMediaDir("lake.bmp")
- If sMedia = vbNullString Then sMedia = AddDirSep(CurDir)
- 'Now let's set the second surface description
- ddsd2.lFlags = DDSD_CAPS
- 'This is going to be a plain off-screen surface
- ddsd2.ddsCaps.lCaps = DDSCAPS_OFFSCREENPLAIN
- 'Now we create the off-screen surface
- Set objDDSurf = objDD.CreateSurfaceFromFile(sMedia & "lake.bmp", ddsd2)
- Set ddClipper = objDD.CreateClipper(0)
- ddClipper.SetHWnd Picture1.hWnd
- objDDPrimSurf.SetClipper ddClipper
- 'Yes it has been initialized and is ready to blit
- bInit = True
- 'Ok now were ready to blit this thing, call the blt procedure
- blt
- End Sub
- Private Sub Form_Resize()
- 'This procedure is called by the me.show event or when
- 'The form is resized during runtime.
- 'Since DX uses pixels and VB uses twips this procedure
- 'Syncs up the two scales
- 'Remember to change the ScaleMode property on the
- 'Form to Pixels. Notice the Width and Height of the form
- 'Stay in twips even after you change the ScaleMode, but
- 'The ScaleWidth and the ScaleHeight are now in pixels.
- Picture1.Width = Me.ScaleWidth
- Picture1.Height = Me.ScaleHeight
- blt
- End Sub
- Sub blt()
-
- 'Has it been initialized? If not let's get out of this procedure
- If bInit = False Then Exit Sub
- 'Some local variables
- Dim ddrval As Long
- Dim r1 As RECT
- Dim r2 As RECT
- 'Gets the bounding rect for the entire window handle, stores in r1
- objDX.GetWindowRect Picture1.hWnd, r1
- r2.Bottom = ddsd2.lHeight
- r2.Right = ddsd2.lWidth
- ddrval = objDDPrimSurf.blt(r1, objDDSurf, r2, DDBLT_WAIT)
- End Sub
- Private Sub Picture1_Paint()
- 'This procedure is called during runtime when the form
- 'is moved or resized.
- Do While objDD.TestCooperativeLevel <> DD_OK
- DoEvents
- Loop
- objDD.RestoreAllSurfaces
- init
- blt
- End Sub
-